package hyl.core.data;

import hyl.core.MyFun;
import hyl.core.fun.MyByte;

/**
 * 过期值管理员,我们把连续值交给他,让他逐一分析是否过期 特别注意 这不是一个线程安全对象,可以实例化多个对象分别处理
 * 
 * @author 37798955@qq.com
 *
 * 
 */
public class ExBytes {

	byte[] b数据;
	long l时间戳 = 0;

	/**
	 * 从数据库读取数据后解析 注意这里是数据保存的数据(带有时间戳,需要分离)
	 * 
	 * @param 转换器
	 * @param 库中数据
	 */
	public ExBytes(byte[] 库中数据) {
		loadBytes(库中数据);
	}

	/**
	 * 载入数据 注意这里是数据保存的数据(带有时间戳,需要分离)
	 * 
	 * @param value
	 */
	public synchronized void loadBytes(byte[] 原始数据) {
		l时间戳 = MyFun.byteArray2Long(MyByte.subBytes(原始数据, 0, 8));
		b数据 = MyByte.subBytes(原始数据, 8);
	}

	/**
	 * 更新值
	 * 
	 * @param value
	 */
	public void setBytes(byte[] value) {
		b数据 = value;
		l时间戳 = MyFun.getMs();
	}

	public byte[] getBytes() {
		l时间戳 = MyFun.getMs();
		return b数据;
	}

	public long get时间戳() {
		return l时间戳;
	}

	public boolean is过期(long 过期毫秒) {
		if (过期毫秒 <= 0)
			return false;
		if ((MyFun.getMs() - l时间戳) > 过期毫秒)
			return true;
		else
			return false;
	}

	public byte[] getSaveBytes() {
		return MyFun.concat(MyFun.long2ByteArray(l时间戳), b数据);
	}
}
